http://howtocodeiosapps.com/index.php/2016/10/24/value-vs-reference-types-in-swift/
資料大致上分成Value Type及Reference Type兩大類,常見的型別如Int, Float, Boolean...是以Struct來定義的,所以都是屬於Value Type。而Class, function, Closure則是屬於Reference Type。
學會 Swift 的關鍵:Value Type vs. Reference Type – WuFeng Chiang – Medium
可以看到把number1 分配給number2時,記憶體存放位置是不同的,所以更動number1的值不會影響到number2。
可以想像成是一個單一開口的箱子,Value Type的值會依宣告順序一塊一塊放在上面(向下排列),在上面的範例中number1宣告完後再宣告number2,在Stack的位置如下圖。
http://www.andrew.cmu.edu/course/15-440-s12/applications/ln/proccontext.jpg
https://manojbhoir.wordpress.com/2015/09/29/value-type-and-reference-types/
現在如果創建一個Class Person,此class內有firstName及lastName的屬性,這些屬性會放在Heap(樹狀結構)中,當今天我們實體化此類別var student = Person(),則變數student是放在Stack中(引用Person這個類別存在Stack)。
class Person {
var firstName = "Edward"
var lastName = "Chen"
}`
var student = Person()
關聯性如下圖所示
PS: 如果在class裡面有宣告static屬性,則此屬性會存在另外一個記憶體區,不屬於Stack及Heap,額外的記憶體區(有人翻成靜態記憶體區)。